package cn.zqy.demo2.day12FunctionalInterface.Predicate;

import java.util.ArrayList;
import java.util.function.Predicate;


/*
    练习：集合信息筛选
    数组当中有多条“姓名+性别”的信息如下，
    String[] array = { "迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男", "赵丽颖,女" };
    请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中，
    需要同时满足两个条件：
        1. 必须为女生；
        2. 姓名为4个字。

    分析:
        1.有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断
        2.必须同时满足两个条件,所以可以使用and方法连接两个判断条件
 */

public class Demo05Test {
    // 1.自己写的
    public static boolean checkMessage(String name, String sex, Predicate<String> pre1, Predicate<String> pre2) {
        return pre1.test(name) && pre2.test(sex);
    }

    public static void main(String[] args) {
        String[] array = { "迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男", "赵丽颖,女" };
        ArrayList<String> list = new ArrayList<>();
        for (String s : array) {
            String name = s.split(",")[0];
            String sex = s.split(",")[1];
            if (checkMessage(name,sex, (String s1) -> {
                return s1.length() == 4;
            }, (String s2) -> {
                return s2.equals("女");
            })) {
                list.add(s);
            }
        }
        System.out.println(list);

        System.out.println("============");
        ArrayList<String> list2 = filterArrayList(array,(String s) -> {
           return s.split(",")[0].length() == 4;
        }, (String s) ->{
            return s.split(",")[1].equals("女");
        });

        System.out.println(list2);
    }
    
    // 2.老师写的
    public static ArrayList<String> filterArrayList(String[] strs, Predicate<String> pre1, Predicate<String> pre2) {
        ArrayList<String> list = new ArrayList<>();
        for (String str : strs) {
            boolean b = pre1.and(pre2).test(str);
            if (b) {
                list.add(str);
            }
        }
        return list;
    }


}
